iOS framework 发布流程总结

之前总结了 iOS framework开发流程,当然,开发完了还需要发布和更新版本,以便开发者能快速方便地使用。

包管理工具

目前苹果生态下的包管理工具有:Cocoapods、Carthage、Swift Package Manager。Cocoapods是老牌的包管理工具,ruby写的,中心化包管理工具;Carthage是随着Swift的诞生出现的,swift写的,与Cocoapods不同,它是去中心化的;而Swift Package Manager,是苹果官方推出的Swift包管理工具,目前只支持OSX和macOS开发,包括Swift server开发的包管理。

因此,我们需要支持Cocoapods和Carthage。

Cocoapods

Cocoapods的framework发布流程有两种,一种是Cocoapods官方提供的 pod lib create命令,优点是会自动生成framework发布工程,包含demo工程、测试框架以及符号重命名,缺点是必须把源码文件添加进去以便打framework。当你不想发布源码时,就得使用第二种方式:自己建framework发布工程。
1.在github上创建git仓库,目录结构:

2.生成podspec:进入新建的git仓库,执行以下命令

pod spec create DTTracker

3.编辑新生成的podspec文件,添加必要的依赖和编译参数

Pod::Spec.new do |s|


  s.name         = "DTTracker"
  s.version      = "0.0.1"
  s.summary      = "DTTracker SDK"

  s.description  = "you can use DTTracker to track your user behavior in your app"

  s.homepage     = "https://www.dtstack.com/"


  s.license      = "MIT"


  s.author       = { "liuyunclouder" => "liuyunclouder@gmail.com" }


  s.platform     = :ios, "8.0"



  s.source       = { :git => "https://github.com/liuyunclouder/DTTracker.git", :tag => s.version }


  s.vendored_frameworks = "frameworks/cocoapods/DTTracker.framework"


  s.frameworks = "Foundation", "UIKit", "CoreTelephony"

  s.libraries = "sqlite3", "z"

  s.requires_arc = true

  s.pod_target_xcconfig = { "OTHER_LDFLAGS" => "-ObjC -all_load" }

end

4.提交修改,打上tag,再次带上tag提交(tag要和podspec里的version匹配)
5.本地校验podspec:

pod lib lint DTTracker.podspec —verbose

6.再次远程校验:

pod spec lint DTTracker.podspec —verbose

7.推送到Cocoapods:

pod trunk push DTTracker.podspec

8.验证是否推送成功:

rm ~/Library/Caches/CocoaPods/search_index.json
pod search DTTracker

Carthage

Carthage目前只支持动态库,而在iOS framework开发流程中,我们新建的framework是静态库,因此,我们需要新建一个framework工程:
1.创建Cocoa touch framework:DTTrackerForCarthage
2.添加valid architecture类型

3.添加compile source(.m文件)和header文件

4.添加link库

5.我们需要让生成的framework名称为DTTracker,而不是DTTrackerForCarthage,因此还需要修改framework名称

6.修改scheme为shared
7.生成framework:进入framework开发工程根目录,执行以下命令

carthage build --no-skip-current
carthage archive DTTracker

8.找到生成的DTTrack.framework.zip文件,放入最开始我们创建的framework发布工程,这时我们的目录结构是这样的

9.打tag,提交远程
10.创建 github release,提交DTTracker.framework.zip

当然,每次还要打开命令行去执行carthage命令,显然是浪费时间,为节省时间同时也方便其它同事打framework,我们可以再添加一个aggregate target:

set -e

carthage build --no-skip-current
carthage archive ${PROJECT_NAME}

mkdir -p "${PROJECT_DIR}/frameworks/carthage"

mv "${PROJECT_DIR}/${PROJECT_NAME}.framework.zip" "${PROJECT_DIR}/frameworks/carthage"

这样,每次我们只需要运行一下这个target对应的scheme就能生成我们需要的DTTracker.framework.zip文件

当然,目前的流程还可以再改进,我们可以再建一个target,修改framework开发工程的版本号后同时为Cocoapods和Carthage打包并copy到framework发布工程,然后修改podspec版本号并打好tag并提交。然而目前就我一个人开发,基本够用,有时间再弄。

参考:

https://guides.cocoapods.org/syntax/podspec.html

https://github.com/Carthage/Carthage#supporting-carthage-for-your-framework

坚持原创技术分享,您的支持将鼓励我继续创作!